home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 185_01 / lexlate.csm < prev    next >
Text File  |  1985-08-19  |  3KB  |  91 lines

  1. ; LEXLATE.CSM
  2. ; Lexical Character order translate
  3. ; *******************************************************************
  4. ; Returns a lexical order number of the character argument
  5. ; *******************************************************************
  6. ; '\0' translates to itself
  7. ; ' ' translates to the lowest lexical order
  8. ;
  9. ; The Other Ordering is:
  10. ;
  11. ; 0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
  12. ;
  13. ; ALL other bytes in the range 0 thru 255
  14. ; translate to a non-existence mark (0xff)
  15. ;
  16. ; The equivalent C code if statics and static initialization
  17. ; were available would be:
  18. ;
  19. ; char
  20. ; lexlate(c)
  21. ;   char c;
  22. ; {
  23. ;    static char xlate[] = {THE_ORDER_SEQUENCE_256_BYTES};
  24. ;
  25. ;    return (xlate[c]);
  26. ; }
  27. ;
  28. ; Alternatively, if external initialization were available:
  29. ;
  30. ; char xlate[] = {THE_ORDER_SEQUENCE_256_BYTES};
  31. ; #define lexlate(c) (xlate[c & 0xff])
  32. ;
  33. ; *******************************************************************
  34. ;
  35.  
  36.     maclib    bds
  37.     
  38. X    equ    0ffh        ; Non-Existence Mark
  39.  
  40.     FUNCTION lexlate
  41.     pop    d        ; DE = return address
  42.     pop    h        ; HL = argument
  43.     push    h        ; argument = HL
  44.     push    d        ; return address = DE
  45.     lxi    d,xlate        ; DE = &xlate[0]
  46.     mvi    h,0        ; HL = offset into xlate
  47.     dad    d        ; hl = &xlate[argument]
  48.     mov    l,m    
  49.     mvi    h,0        ; hl = xlate[argument]
  50.     ret
  51. ;
  52. xlate:    db    0,X,X,X,X,X,X,X        ; ^@^A^B^C^D^E^F^G
  53.     db    X,X,X,X,X,X,X,X        ; ^H^I^J^K^L^M^N^O
  54.     db    X,X,X,X,X,X,X,X        ; ^P^Q^R^S^T^U^V^W
  55.     db    X,X,X,X,X,X,X,X        ; ^X^Y^Z^[^\^]^^^_
  56.     db    1,X,X,X,X,X,X,X        ; <sp><EXCLAIM>"#$%&'
  57.     db    X,X,X,X,X,X,X,X        ; ()*+,-./
  58.     db    2,3,4,5,6,7,8,9        ; 01234567
  59.     db    10,11,X,X,X,X,X,X    ; 89:;<=>?
  60.     ; note: state 12 not used (WAS previously inadvertently assigned to :)
  61.     db    X,13,15,17,19,21,23,25    ; @ABCDEFG
  62.     db    27,29,31,33,35,37,39,41    ; HIJKLMNO
  63.     db    43,45,47,49,51,53,55,57    ; PQRSTUVW
  64.     db    59,61,63,X,X,X,X,X    ; XYZ[\]^_
  65.     db    X,14,16,18,20,22,24,26    ; `abcdefg
  66.     db    28,30,32,34,36,38,40,42    ; hijklmno
  67.     db    44,46,48,50,52,54,56,58    ; pqrstuvw
  68.     db    60,62,64,X,X,X,X,X    ; xyz{|}~<del>
  69. ;
  70. ;     Same Stuff with MSB SET
  71. ;
  72.     db    X,X,X,X,X,X,X,X        ; ^@^A^B^C^D^E^F^G
  73.     db    X,X,X,X,X,X,X,X        ; ^H^I^J^K^L^M^N^O
  74.     db    X,X,X,X,X,X,X,X        ; ^P^Q^R^S^T^U^V^W
  75.     db    X,X,X,X,X,X,X,X        ; ^X^Y^Z^[^\^]^^^_
  76.     db    X,X,X,X,X,X,X,X        ; <sp><EXCLAIM>"#$%&'
  77.     db    X,X,X,X,X,X,X,X        ; ()*+,-./
  78.     db    X,X,X,X,X,X,X,X        ; 01234567
  79.     db    X,X,X,X,X,X,X,X        ; 89:;<=>?
  80.     db    X,X,X,X,X,X,X,X        ; @ABCDEFG
  81.     db    X,X,X,X,X,X,X,X        ; HIJKLMNO
  82.     db    X,X,X,X,X,X,X,X        ; PQRSTUVW
  83.     db    X,X,X,X,X,X,X,X        ; XYZ[\]^_
  84.     db    X,X,X,X,X,X,X,X        ; `abcdefg
  85.     db    X,X,X,X,X,X,X,X        ; hijklmno
  86.     db    X,X,X,X,X,X,X,X        ; pqrstuvw
  87.     db    X,X,X,X,X,X,X,X        ; xyz{|}~<del>
  88.  
  89.     endfunc
  90. ,X,X    ; 89:;<=>?
  91.     ; note: state 12 not used (WAS pr